home *** CD-ROM | disk | FTP | other *** search
/ Openstep 4.2 (Developer) / Openstep Developer 4.2.iso / NextDeveloper / Source / GNU / cctools / include / mach-o / rld_state.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-04  |  3.0 KB  |  62 lines

  1. /*
  2.  * To allow the debugger to debug programs that used rld on themselves without
  3.  * having the having the programs create a debug file information is maintained
  4.  * in the rld package for the debugger.  This information is two static data
  5.  * items and a static routine.  The information that is maintained is the state
  6.  * of the loaded sets are currently loaded into the program.  The number of
  7.  * object files and their names that make up each set and the resulting address
  8.  * they were loaded at is maintained for each set.  The static data symbol
  9.  * rld_loaded_state points to an array of rld_loaded_state structures that
  10.  * contains the above information.  The static data symbol rld_nloaded_states
  11.  * contains the count of these structures.  When the loaded state is changed
  12.  * the static routine rld_loaded_state_changed() is called.
  13.  *
  14.  * This is the only information in the rld package the debugger is allowed to
  15.  * use.  The debugger sets a break point on the routine rld_loaded_state_changed
  16.  * when it is triped on then it can inspect the rld_loaded_state.  Then using
  17.  * the rld package and the program it is debugging as a base file then it can
  18.  * create the symbols for the loaded sets by doing rld_loads for each set.
  19.  * The debugger uses an undocumented feature of rld_load (intended only for it's
  20.  * use) which is to used the interger value of 1 (RLD_DEBUG_OUTPUT_FILENAME)
  21.  * for the output_filename which causes the symbols to be created and left in
  22.  * memory and not written to a file.
  23.  *
  24.  * When the debugger attaches to a running process there is a window of time
  25.  * where the process could be doing an rld operation and the state in not
  26.  * correct.  The window is shorted to it's minimal time by changing the value
  27.  * of rld_nloaded_states so that that number of states can be safely accessed.
  28.  * There are still small windows where problems can occur.
  29.  */
  30.  
  31. struct rld_loaded_state {
  32.     char **object_filenames;    /* pointer to an array of file names loaded */
  33.     unsigned long        /*  in this set */
  34.     nobject_filenames;    /* number of file names loaded in this set */
  35.     struct mach_header        /* The address the set was link edited at */
  36.     *header_addr;
  37. };
  38.  
  39. /* 
  40.  * static unsigned long rld_nloaded_states = 0;
  41.  * static struct rld_loaded_state *rld_loaded_state = NULL;
  42.  *
  43.  * static void rld_loaded_state_changed(void);
  44.  */
  45. #define RLD_NLOADED_STATES    "rld_nloaded_states"
  46. #define RLD_LOADED_STATE    "rld_loaded_state"
  47. #define RLD_LOADED_STATE_CHANGED "rld_loaded_state_changed"
  48.  
  49. #define RLD_DEBUG_OUTPUT_FILENAME ((char *)1)
  50.  
  51. /*
  52.  * moninitrld() can be defined in the librld.o library module if it is used or
  53.  * defined as a common in gcrt0.o if the librld.o library module is not used.
  54.  * The library module is passed monaddition() to call when a rld_load() is done
  55.  * and returns a pointer to the routine to get the rld loaded state so it can
  56.  * be written in to the gmon.out file.
  57.  */
  58. extern void (*moninitrld(
  59.     void (* monaddition)(char *lowpc, char *highpc)))
  60.         (struct rld_loaded_state **rld_loaded_state,
  61.          unsigned long *rld_nloaded_states);
  62.